//给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
//
//
//
// 示例 1:
//
//
//输入: s = "abcabcbb"
//输出: 3
//解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
//
//
// 示例 2:
//
//
//输入: s = "bbbbb"
//输出: 1
//解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
//
//
// 示例 3:
//
//
//输入: s = "pwwkew"
//输出: 3
//解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
//     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
//
//
// 示例 4:
//
//
//输入: s = ""
//输出: 0
//
//
//
//
// 提示：
//
//
// 0 <= s.length <= 5 * 104
// s 由英文字母、数字、符号和空格组成
//
// Related Topics 哈希表 双指针 字符串 Sliding Window
// 👍 5343 👎 0


package com.sj.leetcode.editor.cn;

import java.util.HashSet;
import java.util.Set;

public class LongestSubstringWithoutRepeatingCharacters {

    private static int start;
    private static int maxLen ;

    public static void m(){

        String s  = "aaabaac";

//        向左向右判断，如果相同就继续向左向右
//        直到不相同或者越界为止，并记录最大长度，并更新最大长度的字符串；
        for (int i = 0; i < s.length()-1; i++) {
            mm(s,i,i);

        }
        s.substring(start,start+maxLen);
        System.out.println(s.substring(start,start+maxLen));
    }


    private static void mm(String s, int j, int k){
        while (j>=0 && k<= s.length() && s.charAt(j) == s.charAt(k)){
            j--;
            k++;
        }

        if (maxLen < k-j-1){
            start = j+1;
            maxLen = k-j-1;
        }

    }

    public static void main(String[] args) {
        m();
    }
}
